#include <bits/stdc++.h>

using ll = int64_t;
using namespace std;

const ll maxn{ll(2e5+5)},inf{ll(1)<<60};
ll n,a[maxn],d[maxn],p[maxn],s[maxn],ans{inf};

template<class T>
void pa(T *t){
    for(ll i{1};i<=n;i++)cout<<t[i]<<' ';
    cout<<'\n';
}
template<class T,class ...Args>
void pa(T&&t,Args&&...args){
    pa(t);
    pa(args...);
}

int main(){
    iostream::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>n;
    for(ll i{1};i<=n;i++)cin>>a[i];
    for(ll i{1};i<=n;i++){
        d[i]=a[i]-a[i-1];
        if(d[i]<=0){
            p[i]=p[i-1]+1-d[i];
        }else{
            p[i]=p[i-1];
        }
    }
    for(ll i{n};i>=1;i--){
        if(d[i]>=0){
            s[i]=s[i+1]+d[i]+1;
        }else{
            s[i]=s[i+1];
        }
    }
    // pa(d,p,s);
    for(ll i{1};i<=n;i++){
        /*
            这里可以理解为k是一个山顶，那么差分给中间贡献区间加是稳赚不赔的，
            所以左右两边可以共享操作次数，那么取最值就行了
        */
        ans=min(ans,max(p[i],s[i+1]));
    }
    cout<<ans<<'\n';
}